package ec.edu.ups.cidi.siia.plamdep.frontend.utils;

import java.io.File;
import java.io.FileInputStream;

/**
 * DESCRIPCION:
 * Servlet response para devolver archivos PDF fuera del contexto de la aplicacion 
 * 
 *MAPEO EN APLICACION: 
 * Para mapearlo en el aplicativo incluir en el archivo de despliegue.
 
	<servlet>
        <servlet-name>ServletPDFResources</servlet-name>
        <servlet-class>ec.edu.ups.cidi.siia.plamdep.frontend.utils.ServletPDFResources</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletPDFResources</servlet-name>
        <url-pattern>/resources/reportes/*</url-pattern>
    </servlet-mapping>
  * TEST: 
   Para invocarlo usar el siguiente url de solicitud 
  
    {facesContext}/resources/reportes/?path=/reports_repositorio/reportPlagio_1d395ac7-63ce-4068-98ff-c68144f4aeb8.pdf 
 *
 */
public class ServletPDFResources  extends javax.servlet.http.HttpServlet{
	
	 private static final long serialVersionUID = 3383296804073365483L;
	 
	protected void doGet( javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException
	 {        
	        try{
	        	response.setContentType("application/pdf");
	            java.io.ByteArrayOutputStream out = new  java.io.ByteArrayOutputStream();
	            String path = System.getProperty("plamdep.resources.path")+request.getParameter("path");
	            System.out.println("Descargando archivo:" +path);
	            File fileToDownload = new File(path );
                FileInputStream fileInputStream = new   FileInputStream(fileToDownload);
                int i;
                while ((i=fileInputStream.read())!=-1) 
                {
                          out.write(i);
                }
                
                fileInputStream.close();
	            byte[] bytesResource = out.toByteArray();
	            out.flush();
                out.close();
	            
	            response.getOutputStream().write(bytesResource);
	        }catch(Exception error){
	         error.printStackTrace();            
	        }  
	    }
}
